package com.zrrd.learn.chapter08面向对象.pattern.myreflech;

import java.lang.reflect.Field;

/**
 * 机器人
 *
 * @author wrn
 * @version 1.0
 * @date 2023/8/5 9:16
 */

public class Robot {

    private String privateStr;
    public String publicStr;
    String defaultStr;
    protected String protectedStr;


    /**
     * 类的实例工厂
     *
     * @param c1
     * @return
     */
    public static Object getBeanByFactory(Class c1) {
        try {
            return c1.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }


    public static void main(String[] args) {

        //1 ： 类的名称
        Class robot = Robot.class;
        Object obj = null;
        try {
            obj = robot.newInstance();
            //        rebot -- Rebot 关联对象
            Field[] fields = robot.getDeclaredFields();

            //新型遍历方式  增强型for forEach
            for (Field f : fields) {
                if(f.getName().equals("publicStr")){
                    f.set(obj,"我叫张三");
                }else{
                    f.set(obj,"我叫李四");
                }

                System.out.printf("字段名称为%s==>値为%s\n",f.getName(),f.get(obj));
//            f : 这个字段的关联对象  f 可以直接操作原始字段
//                System.out.println(f.getName());
            }
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }


        //2 : 一个类的实例


        //3: 类的路径

    }

}